/**
 * 标称类型系统（Nominal Typing System）要求，两个可兼容的类型，其 名称 必须是完全一致的，
*/

/**
 * 在结构化类型系统中，USD 与 CNY （分别代表美元单位与人民币单位）被认为是两个完全一致的类型
 * 在标称类型系统中，CNY 与 USD 被认为是两个完全不同的类型
 * 
 * 在《编程与类型系统》一书中提到，
 * 类型的重要意义之一是限制了数据的可用操作与实际意义，
 * 这一点在 标称类型系统 中的体现要更加明显。
*/
type USD = number;
type CNY = number;
const CNYCount: CNY = 200;
const USDCount: USD = 200;
function addCNY(source: CNY, input: CNY) {
    return source + input;
}
console.log(addCNY(CNYCount, USDCount))//400

//对于标称类型系统，父子类型关系只能通过显式的继承来实现，称为标称子类型（Nominal Subtyping）
class Cat { }
// 实现一只短毛猫！
class ShorthairCat extends Cat { }

//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }